<?php namespace system\model;
use houdunwang\model\Model;

class Category extends Model{
	//数据表
	protected $table = "category";

	//允许填充字段
	protected $allowFill = ['*'];

	//禁止填充字段
	protected $denyFill = [ ];

	//自动验证
	protected $validate=[
		//['字段名','验证方法','提示信息',验证条件,验证时间]
		['cate_name',required,'栏目名称不能为空',self::MUST_VALIDATE,self::MODEL_BOTH],
		['cate_sort',required,'栏目排序不能为空',self::MUST_VALIDATE,self::MODEL_BOTH],
		['cate_linkurl',required,'栏目外部链接不能为空',self::MUST_VALIDATE,self::MODEL_BOTH],
		['cate_pid',required,'所属栏目不能为空',5,self::MODEL_BOTH],
		['cate_description',required,'栏目描述不能为空',self::MUST_VALIDATE,self::MODEL_BOTH],
	];

	//自动完成（自动将所填的字符串转换成为整形，进行一些自动的转换）
	protected $auto=[
		//['字段名','处理方法','方法类型',验证条件,验证时机]
		['cate_sort','intval','function',self::MUST_AUTO, self::MODEL_BOTH]
	];

	//自动过滤
    protected $filter=[
        //[表单字段名,过滤条件,处理时间]
    ];

	//时间操作,需要表中存在created_at,updated_at字段
	protected $timestamps=true;

	//获取表中的所有数据
	public function getAllCate(){
//		return $this->get();
		//Arr:tree()，使用方法在手册中搜索：数组增强--->树状结构
		//return $this->get()->toArray();
		//    //toArray()，转为数组
		//在手册中搜做数组增强，树状结构，
		//参数是：数组，字段名称，主键id,父id.
//		Arr::tree($data, $title, $fieldPri = 'cid', $fieldPid = 'pid');
//		return Arr::tree($this->get()->toArray(), 'cate_name', $fieldPri = 'cate_id', $fieldPid = 'cate_pid');
		//return Arr::tree( $this->get()->toArray(), 'cate_name', $fieldPri = 'cate_id', $fieldPid = 'cate_pid');
		return Arr::tree($this->get()->toArray(), 'cate_name', $fieldPri = 'cate_id', $fieldPid = 'cate_pid');
	}
	//获取除了自己和自己子集的所有数据
	public function getSonCateData($cate_id){
		//递归查找自己的子集
		$cids = $this->getSon($this->get()->toArray(),$cate_id);
		//2.把自己追加进去（因为要排除自己和自己的子集）
		$cids[] = $cate_id;
		//p($cids);
		//3.把自己和子集数据踢出去
		$res = $this->whereNotIn('cate_id',$cids)->get()->toArray();
		//p($res);
		//参数是：操作的数组，父集栏目的id值，栏目名称前缀，显示在栏目列表 ，唯一键名，如果是表则是表的主键，父 ID 键名
		return Arr::tree($res,'cate_name','cate_id','cate_pid');
}
    //递归找子集函数
	/*
	 * @param $data				栏目所有数据
	 * @param $cate_id			我们找$cate_id所有子集，栏目id
	 */
	public function getson($data,$cate_id){
		//使用静态变量，不然每次调用自己的时候，$temp都是从空开始，这样数组中就会落下一些数据
		static $temp = [];
		//使用foreach循环来将所有数据与自己数据进行对比
		//看总数据中谁的父集ID与自己的ID一样，谁就是自己的自己然手将其存储到数组中
		foreach ($data as $k=>$v)
		{
			if($v['cate_pid']==$cate_id){
				//echo 1;
				//说明这条数据是我的儿子
				$temp[] = $v['cate_id'];//把找到的这条数据对应的cid存起来
				$this->getSon($data,$v['cate_id']);//接下来应该继续去找$v['cate_id'],它的子集数据
			}
		}
		return $temp;
	}

	//执行删除
//	public function del ( $cate_id )
//	{
//		$model = Category::find( $cate_id );
////		var_dump($model);die;
//		//删除当前的数据对象
//		return $model->destory();
//	}

	/**
	 * 删除
	 */
	public function del ( $cate_id )
	{
		$model = Category::find( $cate_id );
		//增加判断，如果有子集不允许删除
		//var_dump($this->where('cate_pid',$cate_id)->get());die;
		if ( $this->where('cate_pid',$cate_id)->get()) {
			//将错误消息存到模型中
			$this->setError( ['请先删除子栏目'] );
			return false;//执行了false就是退出了函数
		}
		//删除当前的数据对象
		return $model->destory();
	}





}